<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>mpt_solvemp</title>
<style type="text/css">
	body {background-color: white; color: black; font-family:sans-serif; font-size:medium;}
	a:link {color: #3300ff;}
	a:visited {color: #663399;}
	a:hover {color:#0099ff;}
	a:active {color: #0066cc;}
	a.button {text-decoration:none;}
	
	table.nav  {background-color: #dbddff;}
	table.body {margin-top:2ex; margin-bottom:2ex;}
	table.programlistingindent {margin-left:32px;}
	
	img { margin-bottom:0px; margin-top:0px;}
	tt {margin-left:0.5em; margin-right:0.5em; font-weight:lighter;}
	
	p {margin-top:0ex;}
	p.synopsis {margin-left:32px;}
	p.programlistingindent {margin-left:32px;}
	p.citetitle {margin-left:2em;}
	
	ul ul {list-style-type:square;}
	ul li p {margin-top:0ex; margin-bottom:.5ex; padding:0}
	ol li p {margin-top:0ex; margin-bottom:.5ex; padding:0}
	
	h1.reftitle {color:#a90000;}
	h1.reftitle {font-size:3.7ex; margin-top:0; margin-bottom:0; font-weight:bold}
	h1.title {color:black; font-size:4ex; margin-top:1ex; font-weight:bold}
	h2.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:3ex}
	h3.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2.5ex}
	h4.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2ex}
	h2 {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2.5ex}
	h3 {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2ex} 
	
	pre.programlisting {margin-left:32px;}
	pre.synopsis {margin-left:32px;}
	
	
	.categorytitle {margin-top:8px; padding-top:0px;}
	.categorylist {background-color: #e1e6f2;}
 	</style>
</head>
<body>
<a name="top_of_page"></a><p style="font-size:1px;"></p>
<h1 class="reftitle">mpt_solvemp</h1>
<h2>Purpose</h2>
<p>A gateway function to solve parametric optimization problems (without errorchecks)</p>
<h2>Syntax</h2>
<pre class="synopsis">R = mpt_solvemp(S)</pre>
<h2>Description</h2>
<p></p>
		The main routine for fast calls to parametric optimization solvers. 
        In fact, it is a subroutine of <tt>Opt</tt> as a part of <tt>solve</tt> method.
        The <tt>Opt</tt> class serves as general wrapper for preprocessing the data 
        involved in optimization, including necessary error checks. Once the data are valid, 
        then are passed to <tt>mpt_solvemp</tt> function that calls the appropriate parametric solver.
        
        It is assumed that MPLP/MPQP entering this function are of the form
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_solvemp42.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp42.png"></p>
        where the matrices <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp1.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp1.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp2.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp2.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp3.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp3.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp4.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp4.png"> 
      <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp5.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp5.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp6.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp6.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp7.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp7.png">,
        and vectors <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp8.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp8.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp9.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp9.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp10.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp10.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp11.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp11.png">, <tt>lb</tt>, <tt>ub</tt> are the 
        problem data. Vector <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp12.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp12.png"> represents decision variables and <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp13.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp13.png"> are parameters.
        The PLCP must be given as:
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_solvemp43.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp43.png"></p>
        where the matrices <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp14.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp14.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp15.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp15.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp16.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp16.png">, and vectors <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp17.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp17.png">,<img src="../../../../fig/mpt/modules/solvers/mpt_solvemp18.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp18.png"> are the 
        problem data, then <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp19.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp19.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp20.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp20.png"> are the decision variables and <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp21.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp21.png"> are the parameters.
        
        The routine <tt>mpt_solve</tt> processes data from any of the above optimization problems by passing it 
        to the appropriated solver. Following solvers are supported:
        <ul>
            
         <li>
            <b>PLCP</b> is the default solver, called automatically when invoking parametric optimization.
                It can solve MPQP/MPLP and PLCP problems.
            </li>
            
         <li>
            <b>MPLP</b> is the solver from MPT2.6 which is still supported for development purposes. </li>
            
         <li>
            <b>MPQP</b> is the solver from MPT2.6 which is still supported for development purposes. </li>             
        
      </ul>
        
        Note that this function must contain all properties of <tt>Opt</tt> class that have been properly validated
        in order to perform a correct call to given parametric solver. It is recommended to use <tt>Opt.solve</tt> 
        method instead.
        
	<h2>Input Arguments</h2>
<table cellspacing="0" class="body" cellpadding="4" border="0" width="100%">
<colgroup>
<col width="31%">
<col width="69%">
</colgroup>
<tbody><tr valign="top">
<td><tt>S</tt></td>
<td>
<p></p>Object of the Opt class<p>
	    		Class: <tt>Opt</tt><p></p><tr valign="top">
<td><tt>S.H</tt></td>
<td>
<p></p>Quadratic part of the objective function.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.f</tt></td>
<td>
<p></p>Linear part of the objective function.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.pF</tt></td>
<td>
<p></p>Linear part of the objective function for parameters.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.A</tt></td>
<td>
<p></p>Linear part of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp22.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp22.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.b</tt></td>
<td>
<p></p>Right hand side of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp23.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp23.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.pB</tt></td>
<td>
<p></p>Right hand side of the inequality constraints for parameters <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp24.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp24.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.Ae</tt></td>
<td>
<p></p>Linear part of the equality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp25.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp25.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.be</tt></td>
<td>
<p></p>Right hand side of the equality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp26.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp26.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.pE</tt></td>
<td>
<p></p>Right hand side of the equality constraints for parameters <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp27.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp27.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.lb</tt></td>
<td>
<p></p>Lower bound for the decision variables <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp28.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp28.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.ub</tt></td>
<td>
<p></p>Upper bound for the decision variables <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp29.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp29.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.Ath</tt></td>
<td>
<p></p>Linear part of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp30.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp30.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.bth</tt></td>
<td>
<p></p>Right hand side of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp31.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp31.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.M</tt></td>
<td>
<p></p>Linear matrix involved in LCP.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.q</tt></td>
<td>
<p></p>Right hand side vector involved in LCP.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.Q</tt></td>
<td>
<p></p>Linear matrix involved in parametric formulation of LCP.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.n</tt></td>
<td>
<p></p>Number of decision variables.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.d</tt></td>
<td>
<p></p>Number of parameters.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.m</tt></td>
<td>
<p></p>Number of inequalities in <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp32.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp32.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.me</tt></td>
<td>
<p></p>Number of equalities in <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp33.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp33.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.problem_type</tt></td>
<td>
<p></p>A string specifying the problem to be solved<p>
	    		Class: <tt>char</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.vartype</tt></td>
<td>
<p></p>A string array reserved for MPMILP/MPMIQP.<p>
	    		Class: <tt>char</tt></p>
<p>
	    		Default: ''</p>
</td>
</tr><tr valign="top">
<td><tt>S.solver</tt></td>
<td>
<p></p>S string specifying which solver should be called.<p>
	    		Class: <tt>char</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.isParametric</tt></td>
<td>
<p></p>Logical scalar indicating that the problem is parametric.<p>
	    		Class: <tt>double or logical</tt></p>
<p>
	    		Default: 1</p>
</td>
</tr><tr valign="top">
<td><tt>S.varOrder</tt></td>
<td>
<p></p>Order of variables if the problem was processed by YALMIP first.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.Internal</tt></td>
<td>
<p></p>Internal property of <tt>Opt</tt> class.<p>
	    		Class: <tt>struct</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.recover</tt></td>
<td>
<p></p>Affine map for MPLP/MPQP problems after transformation to LCP.<p>
	    		Class: <tt>struct</tt><p></p><tr valign="top">
<td><tt>S.recover.uX</tt></td>
<td>
<p></p>Matrix of the affine map <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp34.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp34.png">.
                            The map is from the optimization variables involed in LCP <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp35.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp35.png"> and in the original LP/QP.
                        <p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.recover.uTh</tt></td>
<td>
<p></p>Matrix of the affine map <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp36.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp36.png">. 
                          The map is from the optimization variables involed in LCP <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp37.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp37.png"> and in the original LP/QP.
                    <p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.recover.lambdaX</tt></td>
<td>
<p></p>Matrix of the affine map <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp38.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp38.png">.
                        The map is from the optimization variables involed in LCP <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp39.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp39.png"> and the Lagrangian multipliers in the original LP/QP.
                    <p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.recover.lambdaTh</tt></td>
<td>
<p></p>Matrix of the affine map <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp40.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp40.png">.
                        The map is from the optimization variables involed in LCP <img src="../../../../fig/mpt/modules/solvers/mpt_solvemp41.png" alt="../../../../fig/mpt/modules/solvers/mpt_solvemp41.png"> and the Lagrangian multipliers in the original LP/QP.
                        <p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><p></p></p>
<p>
	    		Default: []</p>
</td>
</tr><p></p></p>
</td>
</tr></tbody>
</table>
<h2>Output Arguments</h2>
<table cellspacing="0" class="body" cellpadding="4" border="0" width="100%">
<colgroup>
<col width="31%">
<col width="69%">
</colgroup>
<tbody><tr valign="top">
<td><tt>R</tt></td>
<td>
<p></p>result structure<p>
	    		Class: <tt>struct</tt><p></p><tr valign="top">
<td><tt>R.xopt</tt></td>
<td>
<p></p>Optimal solution with the associated functions for optimizer, multipliers and the objective value.<p>
	    		Class: <tt>PolyUnion</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.exitflag</tt></td>
<td>
<p></p>An integer value that informs if the result was feasible (1), or otherwise (different from 1)<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.how</tt></td>
<td>
<p></p>A string that informs if the result was feasible ('ok'), or if any problem appeared through optimization<p>
	    		Class: <tt>char</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.solveTime</tt></td>
<td>
<p></p>Information about the time that elapsed during the computation in seconds.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.stats</tt></td>
<td>
<p></p>Further details from the parametric solver.<p>
	    		Class: <tt>struct</tt></p>
</td>
</tr><p></p></p>
</td>
</tr></tbody>
</table>
<h2>See Also</h2>
<a href="./mpt_solve.html">mpt_solve</a><p></p>
<table class="nav" summary="Navigation aid" border="0" width="100%" cellpadding="0" cellspacing="0"><tr valign="top">
<td align="left" width="20">
<a href="mpt_call_cplex.html" class="button">&#9664;</a>  </td>
<td align="left">mpt_call_cplex</td>
<td>  </td>
<td align="right">mpt_call_quadprog</td>
<td align="right" width="20"><a href="mpt_call_quadprog.html" class="button">&#9654;</a></td>
</tr></table>
<br><p>©  <b>2010-2013</b>     Martin Herceg: ETH Zurich,    <a href="mailto:herceg@control.ee.ethz.ch">herceg@control.ee.ethz.ch</a></p>
</body>
</html>
